/**
 * @ngdoc overview
 * @name blog
 * @description
 *
 * Main module of the application.
 */
define(function (require, exports, module) {
  'use strict';
  var app = angular.module('blog', [
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngTouch',
    'LocalStorageModule',
    'ngFileUpload',
    'angular-lazyload'
  ]);
  require('./services/mh-services')(app);
  require('./services/mh-directives')(app);
  app.config(['$routeProvider', 'localStorageServiceProvider', '$httpProvider',
    function ($routeProvider, localStorageServiceProvider, $httpProvider) {
      localStorageServiceProvider.setPrefix('blog');
      //改变默认设置，使其可以正常提交post数据
      $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

      /**
       * The workhorse; converts an object to x-www-form-urlencoded serialization.
       * @param {Object} obj
       * @return {String}
       */
      var param = function (obj) {
        var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

        for (name in obj) {
          value = obj[name];

          if (value instanceof Array) {
            for (i = 0; i < value.length; ++i) {
              subValue = value[i];
              fullSubName = name + '[' + i + ']';
              innerObj = {};
              innerObj[fullSubName] = subValue;
              query += param(innerObj) + '&';
            }
          }
          else if (value instanceof Object) {
            for (subName in value) {
              subValue = value[subName];
              fullSubName = name + '[' + subName + ']';
              innerObj = {};
              innerObj[fullSubName] = subValue;
              query += param(innerObj) + '&';
            }
          }
          else if (value !== undefined && value !== null)
            query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
        }

        return query.length ? query.substr(0, query.length - 1) : query;
      };

      // Override $http service's default transformRequest
      $httpProvider.defaults.transformRequest = [function (data) {
        return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
      }];
      $routeProvider
        .when('/home', {
          //首页
          controller: 'homeCtrl',
          controllerUrl: 'scripts/controllers/home.js',
          templateUrl: 'views/home.html'
        }).when('/blog', {
          //博客
          controller: 'blogListCtrl',
          controllerUrl: 'scripts/controllers/blog-list.js',
          templateUrl: 'views/blog-list.html'
       }).otherwise({
          redirectTo: '/home'
        });
    }]);
  app.run(['$lazyload', function ($lazyload) {
    $lazyload.init(app);
    app.register = $lazyload.register;
  }]);

  //TODO 老早写的传值
  app.factory('tempData', function() {
    var data = {};
    return data;
  });

  module.exports = app;
});
